/**
 * @用户路由权限相关接口
 */

import { useMutation } from "react-query";
import { useRequest } from "../../utils/request";
import { DEFAULT_USER_TYPE } from "../../utils/constants";

/**
 * !获取当前登陆用户可用的路由菜单列表
 */
export const useGetRouteByUser = () => {
  const request = useRequest<RouteVO[]>();
  return useMutation(async () =>
    request("/cm_rbac/menu/list_menu_route", {
      data: {
        sysType: DEFAULT_USER_TYPE,
      },
    })
  );
};

/**
 * !获取全部的路由菜单列表
 */
export const useGetRoute = () => {
  const request = useRequest<RouteVO[]>();
  return useMutation(async () =>
    request("/cm_rbac/menu/route", {
      data: {
        sysType: DEFAULT_USER_TYPE,
      },
    })
  );
};

/**
 * 路由类型
 */
export type RouteVO = {
  id: number; //路由ID
  name: string; //路由名称
  parentId: number; //上级路由ID
  path: string; //路径
  component: string; //组件
  redirect: string; //当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
  alwaysShow: string; //是否一直显示根路由
  hidden: string; // 当设置 true 的时候该路由不会在侧边栏出现 如401，login等页面，或者如一些编辑页面/edit/1
  seq: number; //排序
  meta: RouteMetaVO; //路由元数据类型
};

/**
 * 路由元数据类型
 */
export type RouteMetaVO = {
  title: string; //设置该路由在侧边栏和面包屑中展示的名字
  icon: string; //设置该路由的图标
  noCache: string; //如果设置为true，则不会被 <keep-alive> 缓存(默认 false)
  breadcrumb: string; //如果设置为false，则不会在breadcrumb面包屑中显示(默认 true)
  affix: string; //若果设置为true，它则会固定在tags-view中(默认 false)
  activeMenu: string; //当路由设置了该属性，则会高亮相对应的侧边栏。
  roles: string[]; //需要什么权限才能访问该菜单
};
